{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[-0.017612, 14.053064],\n",
       "        [-1.395634,  4.662541],\n",
       "        [-0.752157,  6.53862 ],\n",
       "        [-1.322371,  7.152853],\n",
       "        [ 0.423363, 11.054677],\n",
       "        [ 0.406704,  7.067335],\n",
       "        [ 0.667394, 12.741452],\n",
       "        [-2.46015 ,  6.866805],\n",
       "        [ 0.569411,  9.548755],\n",
       "        [-0.026632, 10.427743]]),\n",
       " array([0, 1, 0, 0, 0, 1, 0, 1, 0, 0]))"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "\n",
    "#加载数据\n",
    "def load_data():\n",
    "    with open('简单逻辑回归.txt') as fr:\n",
    "        lines = fr.readlines()\n",
    "\n",
    "    x = np.empty((len(lines), 2), dtype=float)\n",
    "    y = np.empty(len(lines), dtype=int)\n",
    "    for i in range(len(lines)):\n",
    "        line = lines[i].strip().split(\"\\t\")\n",
    "        x[i] = line[:2]\n",
    "        y[i] = line[2]\n",
    "\n",
    "    return x, y\n",
    "\n",
    "\n",
    "w = np.ones(2)\n",
    "b = 0\n",
    "\n",
    "x, y = load_data()\n",
    "x[:10], y[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "#把线画出来,线就是wx + b = 0\n",
    "def draw():\n",
    "    X = np.arange(x[:, 0].min(), x[:, 0].max(), 1)\n",
    "    Y = np.empty([len(X)])\n",
    "    for i in range(len(X)):\n",
    "        Y[i] = (-w[0] * X[i] - b) / w[1]\n",
    "\n",
    "    plt.scatter(x[:, 0], x[:, 1], c=y)\n",
    "    plt.plot(X, Y)\n",
    "\n",
    "    plt.show()\n",
    "\n",
    "\n",
    "draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.999999197434851"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def model(x):\n",
    "\n",
    "    #计算模型\n",
    "    out = x.dot(w) + b\n",
    "\n",
    "    #激活函数,把数据压缩到0-1之间\n",
    "    out = 1 / (1 + np.exp(-out))\n",
    "\n",
    "    return out\n",
    "\n",
    "\n",
    "pred = model(x[0])\n",
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.999999197434851"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#求误差\n",
    "def loss(pred, y):\n",
    "    return y - pred\n",
    "\n",
    "\n",
    "l = loss(pred, y[0])\n",
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([  0.01761199, -14.05305272]), -0.999999197434851)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#求梯度\n",
    "def gradient(loss, x):\n",
    "\n",
    "    #w的梯度是抄书的,我也不知道为什么是这么算\n",
    "    #简单理解,就是x0*loss + x1*loss = gradient\n",
    "    #也就是说,loss决定了方向和步长,x的值决定了另一个方向和步长.\n",
    "    g_w = loss * x\n",
    "\n",
    "    #这个是我自己写的,简单的求和就完事了\n",
    "    g_b = loss.sum()\n",
    "\n",
    "    return g_w, g_b\n",
    "\n",
    "\n",
    "gradient(l, x[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 4.67272613, -3.05600659]), 21.269580883747157)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#训练\n",
    "lr = 1\n",
    "for i in range(10):\n",
    "    for xi, yi in zip(x, y):\n",
    "        pred = model(xi)\n",
    "        l = loss(pred, yi)\n",
    "        g_w, g_b = gradient(l, xi)\n",
    "        w += g_w * lr\n",
    "        b += g_b * lr\n",
    "\n",
    "    #lr递减\n",
    "    lr /= 2\n",
    "\n",
    "    #防止变成0\n",
    "    lr += 1e-5\n",
    "\n",
    "w, b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd3iUVRaH3zt90iChk4BIR3oAERWkKAJ2wF5WEbHr2l3bir2sXVfUtVdUAoKCogJSRBFC70hNAoEQSJ3+3f3jG0KSmUDKZGaS3Pd58sh85d4zMXPmfuf+zjlCSolCoVAo6j+GSBugUCgUivCgHL5CoVA0EJTDVygUigaCcvgKhULRQFAOX6FQKBoIpkgbcCyaNm0q27VrF2kzFAqFos6wYsWKHClls2Dnotrht2vXjuXLl0faDIVCoagzCCF2VXROhXQUCoWigaAcvkKhUDQQKu3whRAfCCH2CyHWlTr2uBAiUwixyv8zpoJ7RwkhNgshtgkhHgyF4QqFQqGoGlVZ4X8EjApy/BUpZR//z+zyJ4UQRuAtYDRwEnC5EOKk6hirUCgUiupTaYcvpVwI5FZjjpOBbVLK7VJKN/AVcEE1xlEoGiRej5cNf2xhy4q/0TQt0uYo6jChUOncJoS4BlgO3COlPFTufDKwp9TrDGBgRYMJISYBkwDatm0bAvMUirrLXz+t4tkrXsXn1ZBSEtsohie+e4BOqe0jbZqiDlLTTdu3gQ5AH2Av8FKQa0SQYxWW6JRSviul7C+l7N+sWVApqULRIDiQcZDJ4/5DwaEiigscOAqd5GTmcv+ZT+ByuCJtnqIOUiOHL6XMllL6pJQa8B56+KY8GUCbUq9TgKyazKtQNAR+/vQ3NJ8v4LjP52PpTJWfoqg6NXL4QohWpV5eBKwLctlfQCchxIlCCAtwGTCzJvMqFA2Bw/vz8Li8Acd9Xh/5BwsjYJGirlMVWeaXwFKgixAiQwhxPfCCEGKtEGINMAy4y39tayHEbAAppRe4DfgJ2Ah8LaVcH+L3oVDUO/qd2Qt7nC3IGUGvM5TQTVF1Kr1pK6W8PMjh9yu4NgsYU+r1bCBAsqlQKCqm/6g+dOrXns1//Y2rWI/Z22KtnHHxINp1b3OcuxWKQKK6lo5C0ZAxGo0899Mj/PThAn79bCEmq4lzbjiTMy45NdKmKeooIpp72vbv31+q4mmKuk7+wQJmvv0Ta37bQJsurbnw9tG06ZIcabMU9RQhxAopZf9g59QKX6GoRXIyD3Jzvwcozi/G7fSw5rf1zP1oAZO/e4DUET0jbZ6igaGKpykUtcjH/55KQW4BbqcHAJ9Xw1ns4qWJ/yWan64V9RO1wlcoQoyUkrWLNrJ20UYWfvsHPm9gOYRD2Xnk7jtMk1aJEbCwLAWHCnEVu2jSOgkhguVJKuoLyuErFCHE5/Xx6AXPs3bhBtwON1oFq3ipSWyx1jBbV5bDB/J4/uo3WL1gPcIgaNyiMfd9cAt9hvWIqF2K2kOFdBSKEDLn/Xms+W0DziIXmiaDFhExmY30H9mb2ISY8BvoR0rJg2c/xar56/C4vbidHvbvOsAj5z1H5ra9EbNLUbsoh69QhJCfPpxXopkvjz3OijXGSse+J3LfR7eG2bKybE3fTubWvXg9ZUs3eD1evnvrxwhZpahtVEhHoQgD1hgrE56+kt5DT+LEnidE2hz2787BYAxc7/k8PrK27ouARYpwoFb4CkUIOfu64VhjAmPz8YmxnH/r2VHh7AE6pbbH4w6s02O1W+g1VJVtqK8oh69QhJDR1w+n15Bu2GKtCIPAFmslJt7Oo9/cg8EQPR+3Fic0Y/jlp5f5cjKajMQ2jmXMxDNDOpeUUklQowSVaatQhJgSWebCjSS2aMQZlwwitlFspM0KQNM0Zk2Zy4w35uAocHDKuf255vGLSWoZGqlofm4Bb93xIQu/XYrm0+g3sjd3vDWRlu2ah2R8RXCOlWmrHL5CoQg5mqZxY597ydiyF68/dGQwCBKaxvPJtjexx9kjbGH95VgOP3qeMRUKRb1h1fz1ZO88UOLsATRN4ixy8evniyNoWcNGOXyFQhFy9mzKxOcN7NblLHKxY92uCFikAOXwFYp6j6Zp/L16JzvW7Q7b5ukJJ6VgNBkDjttirXTofWJYbFAEonT4CkU9Zt3ijTx56Ss4ChxIKWnUNIHH0+6jY9/adbq9h3anVYcW7NmYWSL/NBgNxMTbGXb5aTUa2+fzsfCbP/jls4UYTQZGXTecQef3V3WAKoHatFUo6il5Oflc1f5WnIXOMsdjG8fw5Z53sMcGa58YOgoPFzHlno9ZMPV33C43VqsFt8tDqxObM+GZKxgyflCVx5RSMnnci6z4eQ3OoqNdwIZfcTp3vXNTqN9CnURt2ioUDZB5XyxG8wVW6tS8GkumL6v1+eMax3Lv+7dw17s3YrGacRa70Hwamdv28cK1b/LbN0urPOaahRvKOHvQ9wV+/WwRO9btDqX59ZKqNDH/QAixXwixrtSxF4UQm4QQa4QQ04UQjSu4d6e/2fkqIYRasisUVWTzX9u449SHGGW5lHHNJvDZU9/i8wVuipYmd99h3A53wHGP28Oh7LzaMjWAD/71Ba7isna4it28/9DnVR5r+U+ryzj7I2iaRvrPa6ptY0OhKiv8j4BR5Y79DPSQUvYCtgD/Osb9w6SUfSp61FAoFMHZtTGDe4c/zsY/tuLzauQfLOCr56bzxq3/O+Z9vc44CVtcYNjGZDbRa0i32jK3DFJK9u/JCXoue+eBKo8XnxSL2WoOOG40G4lLjL7ktmij0g5fSrkQyC13bK6U8ojQ9g8gJYS2KRQK4KNHvwxY1bqK3cz9+DfyDxZUeF+/s3rRuV97rDGWkmPWGCv9zupFlwEda83e0gghaJqcFPRcs5QmVR5v+BWDMRgDN2cFgtPHDqzyeA2NUMbwJwBzKjgngblCiBVCiEnHGkQIMUkIsVwIsfzAgaqvABSRZf+eHN657xPuGfZv/vvPD9m7IzvSJtVpfD4ff8xaEfScyWIk6++KK1saDAae++kRbnj+Kjr1a0/XgZ249bXrePSbe2rL3KD844lLAwrKWWMsXPvUZVUeq2nrJB6dejcx8XZiEvSfuMRYnvr+XxHtL1BXqJJKRwjRDvheStmj3PGHgf7AWBlkQCFEaylllhCiOXoY6Hb/E8MxUSqdusXO9Xu487SHcTvdeN0+TGYjZquZlxZMplNq+0ibVydZ8fNqHj7n2aBJTAajgffXv8Kq+espyium31m9al1uWV3mfPArHz82lYNZh2ianMR1T1/OyGuGVns8t9PNuiWbMRoNdD+tCyazUpgfIWS1dII5fCHEP4CbgBFSyuJKjPE4UCil/M/xrlUOv25x35mTWTVvXcDxrgM78cbSZyJgUd3nxw/m8ebt7+MKsvnapHUiRXnFSKk3LjGZjQy95FTuef+WqNWka5oWVVVD6yO1JssUQowCHgDOr8jZCyFihRDxR/4NjAQCvYKizrNu0aagxzcv24amBcoDFceny8nBY+1Gk4GCQ0U4i1y4il34PD5cxW5++2YpS2dF7yJJOfvIUhVZ5pfAUqCLECJDCHE98CYQD/zsl1xO8V/bWggx239rC2CxEGI1sAz4QUqpeqjVQ2xxwZtyW2zmqF1xbv5rG2/e8T6v3fwuq+avi7q67Sf2aMuA0X3LbLyaLCYaN2+EyRxYusBZ5GLuxwvCaKGiLlHpwJeU8vIgh9+v4NosYIz/39uB3tWyTlGnOPfGkaS99kMZ7bfFZmbU9cOj0uF/+sQ3TH1hBm6nB6Tkl88WMuzy07nrnRujyt5HvrqLGW/O4Yd3fsbt9DDk4lPodkoX/jPhraDXSy26vrQU0YPa6VCEjGsev5jMbXv58/sVmK1mPC4PqWf2YtILV9fKfG6nm9x9hzEYDRQeKqJVhxaVLhewd3s2Xz03XXf2fpxFLuZ9sZhR1w3jpEFdasXm6mA0GRn3z3MZ989zS465nW5d+1YOW6yVs645I4zW6XjcHpbOXM6ezVm07tCC/btz+HN2OkmtErnwttH0OK1r2G1SBKIcviJkmC1mHvv6Hvbt3M+eTZmkdG5Nq/YtQj6PlJJPJn/NN/+ZicflRfNpmCwmjEYDlz80liseGnvcFfqyOSuDHnc5XPz+3V9R5fCDYbFZePiru3ji4v8gNYnH7cVqtzDo/P6cesGAsNqSk5XLnac+TEFuIY4iJwKBRIIEIeCPWcu56eVrOXfSWWG1SxGIcviKkNOyXfNabWOX9uoPfPufWWXS9b1uL17gq2en0+KEZpx51ZBjjmG1WzAYA7ewjCYj1tjgexHRxsmj+/Lp32+xYOrvuixzZG+6ntwx7OGo129+j4NZufi8+sa8LPXoIaWeJDbl7o8ZceXgWi/Ypjg2astcEVU4i10smLqEWVPmkrF1b9Brpr4wA2dxYD2VI/d/9dz0485z6oUDgsa6jSYjwy8/vWpGR5DEFo256I4xXPXoeLoN7BR2Z69pGsvmpJc4+4owmo1sS98RJqsUFaFW+IqoYeOfW/nXqKfQNA3NqyGlZMwNZ3LLq9eVcWR5ORWXEwAqVRgsISmeR6bezVOXvaKn6kvweX3c9voEkju2qvF7UZRF8/iIT4qLtBkNHuXwFVGBz+vj0fOepSivbDrHjx/Mo//I3gw8p1/JsRO6p7BjTfBSuEIIepxeuQ3CU87tx9d732PZbH2FOmBUHxKaxFf/TTRADAYD/Uf15a85K4OWYgY9I7hl++a0694mzNYpyqNCOoqoYP3vm3G7vAHHnUUuZv/v1zLHbn752jK69CMIg8AWZ2XCM1cA+pfIgYyDuBzBwz8AMfF2hl56GiOuHBxWZ+8sdrF6wXq2rPi7ytp/n9fHwm+X8vw/3mDKPR+za2NGLVlZOf759g0ktUrE7q/MabIYQei/W1uslZTOrXn6+2MV0lWEC7XCV0QFXreXisLPHpenzOu+w3vyws+P8fG/p7J15Q6Quhyxz7AeXPnIOJI7tmLmf3/kg4e/xOvxgoRzbzyLG164Omif1XDzy+cLee2mdzEYDUhNktA0nqd/eIgTuh2/2KzH7eGBs55ka/oOnEVODEbB9NdnY7aaMVtNDLvsNK5/5gpiG4WvVHDT5CZ8vPUNfp+xjD2bs2jXoy29hnTj71U7SWgaT4fe7aIqr6Eho1ocKqICl8PFxS0m4ijXjs8Wa+XOtycdV3VTmt++/p0XJ/wXV6mNXWuMhfNvOZtJL1wTMpurw461u7h90ENlFEZCQGLLRL7Y/TZG47G/kH78cD5v3fF+0CYgoGfhpnRuxZSVLx53LEX9RLU4VEQ9VruV+z66DavdoocEAFucjR6nd2XYZVVrev3pk9+WcfagSwNn/ncuHrengrvCw/fv/IynXOhKSnAWOlnz24bj3r9g6pIKnT3oT0rZOw+w/KfVNbZVUf9QIR1F1DB47EA6pb7C3I8XkJ+Tz8Bz+tFvZO8qF9zKyTwY9Ljm81Gc76BR08COScdj14Y9/O9fX7B+ySYSWzTisgcu4syrh1Q5VJG773DwzU0B+QcLj3u/PUgHq/K4nW52rNnFwDGpQc/v3pTJD+/+TE5mLieP7suwy07DYgvcE1HUP5TDV0QNHreH5m2bcs2/L6nROJ1S2wct0xzbKLZa0sCMLVncfspDOIucSAkFuYW8fut77N99gCsfGV+lsU49fwDLf1oVsEr3uLz0HHx8ddE5k84Ken9pLHYLrTu2DHpuyYxlPHvla3g9XnxejWWz05n2yve89vvTKimqAaBCOoqIs/mvbdzc/37OibmS8+Ku4pWb3qkwsaoyTHz2yqAdlia9eHW1yvN+/vQ0XA43pbe7nEUuvnxuBo4iZ8U3BuGMS0+lTZfWZVRGtlgrl9x3PkktE497f/+RvRn7z3Mw28zYYq1Q7gHDYDQQ2yiGQecHhnC9Hi8vXvcWLoe7JFHKWeQic9teZr09t0rvQ1E3USt8RUTZuz2be0dMxunfrHU7PfzyyW8c2J3DM7MfrtaYXQZ05OXfJvPhI1+xbeV2WpzQnKv/fXGFIY7jsWHplqBhGINRsG/Hfk7s0faY969bsonv3vqRvAP5nHrBAJ796VF+m/o7C6YuIbZxDOfffDYDRvWttD3XPXk55944klXz1+F1e/n180WsW6z3Iug7vAd3/+9mzJbAsNXfq3YGzS52OzwsmLqES+49v9I2KOomyuErIkraaz8EyC7dTg+rF6wnY+teUjpVL+u1c78OPDun4i+M/bsPsGDq7ziLXQw8px9d+neo8NrWHVuStS2wd6zX46NJq2Ovyr97aw7vPfAZbv8Twoalm/n+nZ95449nOP+Wsyv/hsrRLKUJZ12tV8Ucff0I3P7focVa8f6ELdZaYXJUTLy92rZEAiklufsOExNvwx4XetullKTvPsxvWw5w15nhL1lRWyiHr4goO9buxucJ7NdqtprJ2rav2g7/WPz6xSJevmEKmk/D5/Xx9YszOfPqIdz53xuCfrA79T2R5T+uKnNMGASDxw48ZrJWUX4x793/WZn2hK5iN/t2ZPPTh/O58LbRIXtPx3L0R2jbLYVmbZqQsWVvmWQvW6yVC24dFTJbaps/f1jBqze9S97BAtAkp150Mne/e1NIvrT25BYzY2UmaSsz2ZFThM1s4JL+KaQk1o8G6SqGr4goXQZ0xGwJXHd4XB5OOOn4iUhVpfBwES/fMAW3w43X7UVqElexi18/W8jqBesDri/KK2Laqz8EHDcYBIPOCyp1LmHzsm1Bm2u7it0sTvuz+m+imggheGLmgzRNTsIeb8Meb8NiM3PODWdy+tiBYbenOmxbuYMnL32ZnMxcPE4PHreX32cs48lLXqr2mIUuL18v38Nl7y5l8AvzeennLbRIsPLC+F4sf+SseuPsQa3wFRHmojtG88O7P+P1eEs2RY/UdW9xQrOQz7f8p1UYTYHrHFexi3lfLqbPsB5ljq+avx6T2YjbUfZ6n1djcdqfDL204hyB2Max+IL08hUCGjWNTM2elE6t+HTHW6z5bQOHsvPocXpXmrdpGhFbqsPX/5lZpmkN6AqnNb9tIHvXgUr/zfg0yZJtOaSlZ/Dj+n04PRonNo3lnrM6c1Fqcr1y8qWptMMXQnwAnAvsl1L28B9LAqYC7YCdwCVSykNB7h0FvAYYgf9JKZ+rseWKekHT5Ca8vvQZptz9MasXrMceb+P8m0dyxcPjamU+YTAQIG3Rz2AMUh/fXEGoRAhd/ngsOvdrT1LLxuzdnl1ms9Rit3JBCMM5VcVoNNJ3eM+IzV8TMrdkBd14NlvN7N+dc1yHvyW7gGnpGcxYmUl2vosEm4lxqSmM65dC3zaN602sviKqssL/CL1p+Seljj0I/CqlfE4I8aD/9QOlbxJCGIG3gLOADOAvIcRMKeXx0woVDYK2XZN5ZvZDYZmr/9m9g25cWuwWRgQp39BneI+gTsBitzJqwvBjziWE4Nk5D/Pg2U9xeH8ewiDwun1MePoyeg05qfpvIgh//rCC7/77I0V5DoZeMogxN5yJ1V43GrlUhZ5DurF9zS685fZ9PC4PJ3QPHgI8WOhi5uos0tIzWZuZh8kgGNqlGY+fl8Lwbs2xRkF9pXBRpVo6Qoh2wPelVvibgaFSyr1CiFbAAilll3L3DAIel1Ke7X/9LwAp5bPHm0/V0lHUBktmLOOZK19DCNC8GsJo4MLbRnHD88F7765ZuIFHztP/XDWfhtQk4+89n+ueuKxS80kp2bL8b/JzCznplE7HLGxWXODgYFYuzdo0xRZTOYf9wSNfMP212SXJWNYYCymdW/P60mcqtZlbl8jJPMgNve6hOK8Yzb/St8VaOe/mkWXqJLm8PuZt3M+09EwWbN6PV5P0SE5gbN8Uzu/TmqZx9e/L8AjHqqVTU4d/WErZuNT5Q1LKxHL3jAdGSSkn+l9fDQyUUt52vPmUw1fUFocP5LFo2p+4il2cPCaVtl2Tj3m9o8jJH7NW4Chw0G9k75DvL/h8Pqbc/TGz3/sFo8mIpknG3X0u106+9JhhhoN7D3FNh1sD4tq2WCu3vzmRkf8YGlI7o4G927P58NEvWfnrWuKT4hl/93mMvl5/2lq55zBp6RnMWr2XPIeH5vFWLuqbzNjUFLq0bBi9Do7l8MOxaRvsr7XCbxkhxCRgEkDbtsdOaFEoqkvjZo0476aRlb7eHmurchG3qvDJ498w5/1f/Y5bd95pL39PYvNGx5Rvrlu8CZPZFODwnUUuls5aHjaHv3/3AeZ/tYSivGJOHpNK91O7BHxR/Tk7nW9fnsXh/XkMHJPK+HvOo3GzRlWeq1X7Fjz0+T9LXmccKuat+dtIS89ku19KeXb3loxNTeH0jk0xGup3XL4qqJCOooT8gwW89+BnLPr2D4RBMPzy05nwzBXEJtRPxUK0IKXkwsb/oLjAEXBOCLDH2xk87hRueP4qGjVNKHN+5by1/PuiF3AUBJZ4sMXZuOudSQy/fHCt2Q7w2zdLefHaN/H5NLweL7YYK6deMIAHP72jxOl//Z+ZfDr565Kwk9liIqFpPO+ufqlajWcKXV7mrN1LWnomS7frxfIGnpjEuNQURvdsSbytfoWyqkJthnReBA6W2rRNklLeX+4eE7AFGAFkAn8BV0gpA0XP5VAOP3x43B4m9rib/bsOlGyImSwm2nZN5u30F6pVg0ZRObweL2NsVxyz85XJbKR526a8v+HVMtp+n8/Hle1uITcrl2C3W2Ms3Pv+LceUj9aE4gIHl7SaWKa+P+ghpYe/vItTzu2nX9NyYpkENACLzcwl91/APx6/tFJz+TTJ73/nkJaeyY/r9uHw+GjXJIaxqSlc1DeZNklqYQIhqocvhPgSWAp0EUJkCCGuB54DzhJCbEVX4Tznv7a1EGI2gJTSC9wG/ARsBL6ujLNXhJffv1vOoezDZdQPXreXvduzWTFX1VavTUxmU4XVLY/g9fg4lJ3Hkhl/lRyTUrJ6/nq6ndIJewVZpq5iNx88/GVI7S3NqvnrgnYRcxa5+PWLRQBsWf43MkgU1+30sGz2yuPOsTW7gOfmbOK05+Zx9fvL+HVjNhelJjPt5lOZf+9Q7hjRSTn7SlLpGL6U8vIKTo0Icm0WMKbU69nA7Cpbpwgb21fvDBoWcDs9bF+zu0rFvRRV59bXrmPyuP8ErIJL4yh0sn3NLs64eBBSSl6+YcpxG6KAHl+vLYLlLpScMxmRUvLp5G9wOwIbzwgBzdo0CXrvwUIXs1ZnMc0vpTQaBEM7N+PRc09iRLfm2MwNR0oZSlSmrQLQC4TZ4mwlVSuPYLGbad2xJT6fDyFEnQ3teD1ehEFEbdu/AaP68sIvj/HpE9+wNX0HBbmFAfkC9jgbKZ312kIb/9zK/K+WBHT2CkZtZCwfoc/wHkFDUbZYKyOvOYNV89exZcX2oPearCbG33VuyWuX18f8TbqUcv4mXUrZvXUCj557EhfUcylluFAOXwHAGZecyv8e/Bx3satE32wwGrDH2pj+2g88eclLGI1GTh83kDvemkh8YtUbiUSC7Wt28cqN77D5r20YTUaGXnYat70+Iawb0Zqm8cunC5k1ZS4uh4vhl53OBbePDmg4ctKgLjw75xG8Hi//6HQ7OZm5JU7fYDRgi7UxZPwpAPwxaznuYzwNHMEaY2HCM1eG/k0dGd9u5bFv7uXxsS8ihF5yQggYM3EEfUf05IOHv8RZQc+AU88fQPfTurJy9yHS0jOZtSaLw8UemsVbmXD6iYxNTaZry4Sg9yqqh2pirihh745sXp74NmsWbkQIQc/BXdmSvh1HvrNkFWeymGjbLZkp6S9GfRp6TlYu13f7Zxn1i9lqolO/9ry2+Omw2fHCdW+y6Ns/SkIvFruFNl1a88YfzwStWw+67a9MmsLyuatBQp9hPbjr3Rtp2a45AF88m8anj38dkHFqtpqwxdooPFxEy3bNuf6ZKzjjklNr9w0CBYcKWTJ9GcX5DvqP6lOS1/Dty7P48JEvA2SjhhaJdLt3PGuwsP1AEVaTLqUc1y+F0zo0wXSMUJHi2IRMpRNulMOPDG6nG4Rg5ls/8tFjXwUoMOxxNp7+4SF6Du4WIQsrx0f/nsrXL8wIaBpujbHy6qIn6dj3xFq3Yc/mTG7qe19gYlScjbveuZHhl59+zPv1onIy4Ith745sJva4O2CVb42x8MWuKdWSOtYGufsOcU3H23EVu9DMJgo7n0B+jw442rYCITj5xCTGpSYzpmerBi2lDCUhUekoGg4WmwWL1czOdbsDnD3o6pCMLVkRsKxq7Fi7K8DZAxhNBjK37g2LDeuXbMYQZLXqLHSS/sua495vMpuCPgW0OrEFd70zCYvdQky8nZh4O7YYK49OvTtqnD1Ao+aNGfv+7eRcOJQdt11G9jmD0RITuKpbExbdP4yvbxzEpQPaKmcfJlQMX1Ehnfp34LdvlgZVgbQ7Tlu/aKDLgI4s/3FVwOra6/HRrkebsNiQ2LJx0I1uk8VEs5SjCpW8nHw+efxrFqf9qdeon3QW4+85L2g9/SOcedUZDDynHyvmrsZoMtL/7N610v2pOmzbX8C09ExmrMxkb56T+F4dGdnczpknNOLCs7tjMinXEwlUSEdRIUX5xVzb+Q7yDxaUbB6arWY692/PKwufjPoYfl5OPtd1u5OiQ0UlG9EWm5new3rwzA/hqc7p8/q4ou1NHMrOK9tlKsbK+xteoXnbZjiLXUzsfhcHs3JLYvJWu4W+I3ry5MwHw2JnKMgtcjNrdRZp6RmsztCllGd0bsa41BQlpQwjka6lo6ijxCbE8NZfz/H2XR/x15yVmCwmzrx6CNc/e2XUO3uARk0TeOvP55hyz8esmLsaa4yF0deP4JrJlcvsDAVGk5GXFkzm3xe9QPauAxgMBqwxFv712Z00b6vLJed9voi8nPwyG7Auh5uV89ayY+0uTux5QtjsrSpur8a8TftJS89g/ub9eHySk1ol8Mg53bigTzLN4pWUMppQK3yFIkxkbN2L2+HmhO4pZfIBnr/2TX755LeA622xVm59/XpGXTcsnGYeFyklqzPySEvPYObqo1LKC/u0ZmxqCt1aKSlldf1k/UkAACAASURBVJHSA+4/QBaB5WSEIanKY6gVvkIRBVTUkD2lU0ssNnPAXoMQghYnVK39oJQSfLtAWBDG1tW2NRhZhx1MX5lJWnoGf/ullCO7t2RcajKnd2yqpJQ1RHrWIXMncKRaKtKLjL8LQ+yEkM2hHL5CEWFGTRjB1Oe/o+SDjp5oldiyMb2Hdq/0ONL9F/LwPaDlARrS1B7R+A2Eqfob7EUuLz+u20faygx+//sgUsLJ7ZK4YXB7xvRqRYJS14QEKT3I3OtBHi57ouBVpLkfwtI7JPMoh69QRJgmrRJ58dd/8/w1b7Bv536khB6ndeGBT++odCkL6ctGHpoIslSJZe9mZO4V0GwBetHayqFpkqXbDzItPYMf1+2j2O2jbVIMd47oxNi+KbRtogqVhRz3MiBY5rQL6fhKOXyFIhzs332Anz9dyOED+fQf2ZsBo/rUSj2hLgM68sHG1zi0Pw+zxURc44rbIAZDOtJA+sod1fRYsGsR2I6/D7BtfyFp/gbfWXlO4q0mLujTmnGpKfQ7IbFObNTXWWQRFfaK0gpDNo1y+ApFBfz5wwqevPRlNJ+Gx+Xlpw/m0WVAR5798eFj6uNrQmLzqneAAsCXRdAVotRA21/hbYeK3Mxao1elXL3nMEaDYEinpvxrTDfOOqmFklKGC8vJIAMriiLsCNvZIZtGOXyFIgget4dnr3q9TKaxo9DJpmVb+eXThYyaMDyC1gUiLAORjllAcbkzEsxlS1u7vRrzN+tSynmbdCllN7+U8vw+rWkeb0MRXoShMTL+fih4Ef2LWwMRA6aeYBsVsnmUw1cogrB52bagZX+dRS5++Sz6HD62kVD0Nnh3A0cyo+1gPQNh7oyUkjWlpJSHij00jbPyj0HtGJuawkmtlZQy0hhir0Za+iCLvwEtT1/Z20ZWaf/leCiHr1AEwWg2Vdhy0GyNPmWKEBZImoos+hCc34OwgP1y9nkuYMYCvcH3tv2FWEwGRp7UgnH9Uhhcx6SUUmrgmI4s/hRkMdjORsTegDDUny8rYe6JaNSz1sZXDl+hCEKXAR2wx9kCuoDZYq2MmRjQ5C0qEIY4RPztFFtv1qWU6Zks+XsBUsKAdok8O7YnY3q2opG9al9YPp+P3RszscVYadW+RS1Zf3xk/mPgnHVUiVT0IdI5B5rMRBiUcqgyKIevUATBYDDwxHcP8sBZT6BpGppXQwLDrxzM6WMHRtq8ADRN8sf2g0xLz2TOur0Uu320SbJzx/BOjE1N5oQmVVP9HGHFz6t57uo3cBa7kD6NVh1aMHn6/bTucOwevKFGejPA8R1Hw1UAbvAdQDq+Q8RW1IFVUZoal1YQQnQBppY61B54TEr5aqlrhgLfATv8h9KklE8cb2xVWkERaVwOF3/MWkFeTgF9hvcoaewRLfx9QJdSTk8/KqU8p1crxqamMKBdzaSU+3buZ2KPu8u0URQGQZNWiXy2879hbRcpHT8g8x/xyxfLYT0bQ+IbYbMl2qnV0gpSys1AH/9ERiATmB7k0kVSynODHFcoohar3RqWjlFV4XCxu6TB96o9hzEIGNK5GQ+O6cbIEEop57z/Kz5v2X4CUpMU5ztI/2UtA87uE5J5KoWxeQUnzGCMri/haCbUIZ0RwN9Syl0hHlehaNC4vRoLNu8nLT2TXzdl4/FJuraM5+Ex3bigT2uaJ4ReSrl/dw5ed/lkLtCk5NC+w0HuqEXM/cDQBHxOoLRNRkSMCudUllA7/MuALys4N0gIsRrIAu6VUq4PdpEQYhIwCaBt2+hvsqGoOlJK1i3exKK0PzBbzIy4cjDte0VvCeBIIaVkbWYeaemZzFydRW6Rm6ZxFq4+pR3j+iXTvXU1k7QqSeqZvVic9mdAAxzN6+OkU7vU6tzlEcIASZ8iD90O3s0gjCBiEI1eQJjU305lCVl5ZCGEBd2Zd5dSZpc7lwBoUspCIcQY4DUpZafjjali+PUPKSWv3vQO875YjKvYhTAYMFtMXPvkZYy/+7xImxcV7M1zMGOl3khkq19KedZJLRiXmsyQTs0w+pYjHdNB+hD2c8EyuFbKHrhdHm7p/wB7/95XUsnTFmvljIsHce8Ht4Z8vsoifft0Waaxnf5FoChDWJqYCyEuAG6VUo6sxLU7gf5SypxjXaccfv1j3eKN/Gv00wGrRovNzMdb36BpcpMK7qzfFLu9/LRel1Iu3paDlND/hETGpqZwTq+jUkot/3ko/gJwAhKwg30UIuG5Gjt9KWXAGI5CB2mv/cD8r37HFmvl/JvP5syrh9RKPSFFaAhXPfzLqSCcI4RoCWRLKaUQ4mT05ukHQzh3vUf6MsG1WE+3tg5DGOIibVK1WJT2ZxnVxxEMRgPL5qyKWo17baBpkj/+ziRtZTZz1h2gyO0jJdHO7cM7MbZvMu2alpVSSu92KP6MstJEBzh+BPvlYKn6JqqUGrJoChR9CDIPaeyASHgEYT0NAHucnSsfHs+VD4+vwTtVRAshcfhCiBjgLODGUsduApBSTgHGAzcLIbyAA7hMRnOrrShDK3wTCt8BDCAMgITG/0VYo0s9UhnMVjPCYED6e+QeQQiB2dIw0kL+PlBI2vINTF+5k6z8WOIsTs7pksnYk0dycocuGAwVrNRdi9BX9eVxIl3zENVx+AUvQvHn6E8MgO9v5KGbIemTao2niG5C8gmTUhYDTcodm1Lq328Cb4ZiroaGdK+EwvcoWdX5P+/y8K3QfClC1K1CV2deNYQZr8/G5Shb2VHzaQw6P+hTaL3gcLGbWWv2Mm1Fhl9KqTG47W7uP/UvzuqwDrvZB4apCDEfsAQfRNj1zcoAn28CUfXEKqkVl3X2JTiRhW8ikv5X5TEV0U3DWFLVYaRjGoEfSAChh3hsZ4bbpBrRrnsbJjx7Bf978HOMRgNCCDSfxsNf3VXlGvDRjsensWDzAdLSM/h1437cPo0uLeL511k+Lmj3Is1js8veIIvBORfsFaSr2EZC/tNBThj1zduqou3XnxiDPTR4t1Z9PEXUoxx+tCNdBP9ESkq3xKtLjL3jHIaMH8Rfc1Zitpo55dx+teLsvR4vs6bM5ccP5iGlZOQ1Qzn/1lFYarH4mZSSdZn5TPNXpcwtctMk1sJVp5zA2NRkurdOgKI3kYXZQW52gC+jwrGFoTEkvo48fCclzTKkFxo9jahO8pGxhV4vP3AmMIVXdlkXkVqhnvlraF5nmsMohx/lCNsYpGtu2dZ1oH/QLXUvhn+Epq2TGH197W3QSil55LznWLd4Y0lN+48e/YrfZy7npfmPh/wDui/PyYxVeoPvLdmFWIy6lHJsajJDOjfDXKoqpTR10zffZbna9cIG5q7HnEdYz4Bmv4P7d8AHltOqvYEvhB0Zey0UfYy+tXYEKyL+tmqN2RCQWgEy70FwLQAMYEiERk8hrEMibdpxUQ4/2rEOBcswcM/3O32T/pPwGMJQu4k3dZn1SzaxfsmmMg1MXA43W9O3s/LXtaSe2avGcxS7vcxdn8209IwSKWW/ExJ5+qIenNuzNY1iKniSsA7VywF4d3G0S5UFjG3BMvi48wpDTMhCeSLuLqShMRS9B9phMHXWVTrmmv9+6ivy0M3gWUnJE7a2D3noNmjyDcIc3U9GyuFHOUIIaPwKuP9AOn8FQwzCfiHC1D7SpkU16xZvwuMKDHk5C52sW7yp2g5f0yR/7shlWnoGc9bupcjtI7mxnduHdeSi1BRObHr80JQQJkj6Cln4Kji+BwTYz0fE3YFejip8CCEQsRMgdkJY562rSO9O8KwhMJzqRhZ/gGj0fASsqjzK4dcBhBBgHYSwDoq0KXWGpFaJmG0WfIXl6tnHWElqlVjl8bYfKGT6ykzS0jPJPOwgrlRVypPbJVUspQSkdhgc3yO1fQhzP7AOQRjiEQmPQsKjVbYlUuhKatmws1t9WSBMQbbVNPDujIBBVUM5fEXIyc8t4NfPF7F/dw49TuvKKef2w2gK78p18LiBvH3XRwHHDSYDwy6r3N7H4WI336/Zy7T0DFbu1qtSnt6pGfeP6sLIk1pitxz/PUnPGmTuP0D6ACdSxICxIzT5rM5IaqVWgMx/Cpw/AF6kuT+i0RMN8ynT1AVkkGbxWPRG5FFOyEor1AaqtELdY8uKv7lv+GR8Xh8uhxt7nI3kTq14eeET2GPD6+C2rdrBE+NfItdf2bFxswQe/fpuugzoWOE9Hp/Gb5sPMK2UlLJzizjGpaZwYd9kWlShKqWUEpkzIojyxgpxt2KIu6k6byusSCmRB8eDdxNHwxgCRDyi2c8IQ9Wfluo6Wv5T4PimlJDCACIB0XQ2wtg0orZBmGrp1AbK4dctpJRc2+UOsrbtK3PcYjNz6QMXcs2/L4mITZlb9yKlJKVz66DqHCkl67Py+XZFBrNWZ3HQL6U8v09rxqWm0L11QrVUPdK7G5lzLkHzKIztMTT7MfAeXyYybzK4FwMGsI1BJDwcsQ166V6FPHRtoKIIG8TdjiHuhkiYFVGklMjir6FYL0eBZTAi/p8IY+tImwaEr5aOooGzf3cOOZm5AcfdTg+/fr4oIg5fCEFK5+AfxOx8pz8uf0RKKTjzpBaM7ZvCGV3KSimrh78MRlACw0FSK9RX09ohwK+Pd/6A9G7U+7ZGQuvt217BCad/1d/w0De6L4XYSyNtSpVRDl8RMgxGA1TwxBjuGH5FONw+5m7Yx7crMliyLQdNQt9We3hy+F+c02UTjZv8AxGbGhLnKkwpSGOK32mW/r3YIObigOul43vQiilx9gB4wLcH3H+C9ZQa21RVpOYIsroHsIG5R9jtUdQM5fAVIaNZShNSOrdmx9rdlA4VWu0WRk0YHjG7NE2ybGcu01ZkMLuUlPKW05xc2OEt2ieWirEXvoUUNkTsNSGZWyS+gTx4JeD2b/aZwNIPEXNl4MXeTZRNgPIjfeD7Gwivw5fe3VBQgcxQ2BH2cWG1R1FzlMNXhJRHpt7F3Wc8hsvhwevyYDQb6X5aVy66Y3TYbdmRU0RaekaJlDLWYmRMT11KOfDEJMg5HbQD5e5yQNHbECqHb+oIzX8D5y967RpzXzD3Cf4EYeoK2Alw+sIIxg4hsacqyOLPAW+QMwZIeBJhSAi3SYoaohy+IqS06ZLM57um8Mes5eRk5NL1lE50G9gpbPHnvGIP36/NYtqKDNL9UsrTOjblvrO7cHb3slJKTaugJYOWG7QZSHURwlZxQbTS19nPQxa9BpqLo2Edsz8Dd2BIbKkSvj0EdfjCjhDBavDUHtK1BFnwDHi3gSEJYm9ExPyjztSwiRaUw1eEHIvVzJDx4UsS8/g0Fm7RpZS/bNCllJ2ax/Hg6K5c2CeZlo0qkFIa2wXflDS2jYgjEYZYaDINmT/ZX/veCPYxiPiHI+PYLAPBtYSAJw7pBVP44vfSvVwvZ3BE7aQdhIJXkLIAEXd72OyoDyiHr6iTHJFSTkvPYOYqXUqZFGvhioFtGd+vclJKkfAg8tAdlJVN2hDxD9Wq7cdCGFsjEt+J2PylEfZxyKIPQPNyVINv17+ETClhs0MWvkagtNUBRf9Dxt6I3k5bURmUw1fUKbLznczwlzjYnF2AxWhgRLfmjE1NYWgVpZTCOhQSpyALXwHvdjCdiIi7q6S9X0NHGOKg6XRk4RS9Tr8hFuxXI2LCLK/1bgt+XAJaDkSJ/r0uoBy+Iuo5IqWclp7J4q0HdCll28Y8eWEPzuvVisYx1V/hCeupdbJVZLgQhiREwkOQUDtPPVIrBi0XjC0QooLqosYOehgnwDjAcPzMVl0x5gRsDT7mrxy+IirRNMlfO/WqlLPX7qPQ5dWllEM7MjY1mfbN6mYT9/qIlJpeQVIWgLlvperzS+nR6/M40vx9mo3IuH9iCKKOEvF3InOvp0xYR9ghZsJxwzla0ZdQ+CrIfBAJyLjbETFXNljHH6om5juBAsAHeMun9Qr9t/saMAYoBq6VUqaHYm5F/WJnThFp/uzXjEO6lHJ0z1aM80spj1WVUhF+pPdvZO4E3aEiQHqQ8Q9iiA2SZ1D6vvxnwTEdcB3NSSt4CWlsjrCNKnOtsAyAxP8i85/WN9lFIsTdgIg5dklnrfhbKHiOkk1neQgKXkRiQsReVq33W9cJ5Qp/mJQyp4Jzo4FO/p+BwNv+/yoU5Dk8/OCvSrli1yGEgNM7NuWekZ05u3tLYizR8SAq/YlTDbo8cCmk1JC514GWTZlM4oLnkeYeCEvvCu5z6cXHcJU740AWvhXg8AGE9XREszlVk8sWvkFgIpsDit4A5fBrlQuAT6QeTPtDCNFYCNFKSrk3TPMrogApvXq81tAYr2Zi0dYDTFuRyc8bs3F7NTo2j+OBUV25sG9rWjWyR9rcEqR7JTL/MX9jbzPSfhEi4aE6U9641vCk62GcgHpBLmTxFxU6fLT8isf0Ben1W4oqhWK0CsbSDoQ0z6IuESqHL4G5QggJvCOlfLfc+WRgT6nXGf5jAQ5fCDEJmATQtm3bEJmniDRa0WfIglfZuD+JtI39+G7zKRwsNpEYY+aKk9syNjWZnsmNou5DKL07/NUij6wUXeCYjtT2IxKnRNK0yKP5wzgByOCbrEcwNPH39C2/whcQytaKxrbg2xnkeErU/Z2Fi1A5/NOklFlCiObAz0KITVLKhaXOV/BXEeSg/mXxLujlkUNknyKC7MuexczlS5m28UY257TGbPAyvP0mxvZJZFifiVhM0RsikUUfBGl44QLXEqQ3I6x69KjDkgoysI0k2BG2syu8TQgDMv5fkP8YRzdiBXoOxD0hM0/E3488fDfl8yyIuz9kc9Q1QuLwpZRZ/v/uF0JMB04GSjv8DKBNqdcpQFYo5lZEJ06Pj7kbspm2IoNFW0GTY+jTcieTh33LuZ1XkmgvBhGDME5ALyMcpXi3oGsRyiEs4NsNDdjhC0NjZPw/oeB1dKcqATuYTgT7+ce81xBzIdKYhCx8C3yZYO6JiLsTYe4aOvtsZ0Lj15CFL4F3t76yj78HYRsRsjnqGjV2+EKIWMAgpSzw/3sk8ES5y2YCtwkhvkLfrM1T8fv6h5SSv3YeKqlKWeDy0rqRjZsGLGRs199pn1SuUJl066ESER+a+Z0/IQte0fuOmtoh4u9FWIfUbFBzL/CsJaCmjHSBKfwFzaINQ+z1SHMvvdCadhisoxAxFyGE9bj3CuuQmv//Od4ctmEI27BanaMuEYoVfgtguj8mZgK+kFL+KIS4CUBKOQWYjS7J3IYuy7wuBPMqooRdB4tIS88kbWUGe3IdxFiMjO7RinGpyZzSvgkc+h94ylelBAyJIEKjp9eKZ0L+I5Q8vns3IQ/dBolvIKxnVHtcEXsd0jENZBFHo5A2sI1GGFvU1Ox6gbAM0KWTiqhHtThUVIs8h4fZa/eSlp7BXzt1KeVpHZoyNjWZUT3KSimle6XeyLt8LDXhKQwxx370rwxSSuSBIcFVGabOGJp+X7PxvduQ+c+Ae7leXiDmakTsJISIDrmoQlEa1eJQERK8Po1FW3P4Nj2DnzfoUsoOzWK5f1QXLuqbXKGUUlj6QtKneizVs8kfS71Dr2UTEjx6rfmgRu+o8ejC1BGR9EGNx1EoIo1y+IrjsiErn7T0DGasyiKn0EVijJnLB7RhXL+USksphaU3IumTWrLQDCJBbygdgIaUPoSoXotFqRUjHWngmg/GZoiYqxCqtZ+ijqIcviIo+wuczFyVxbcrMti0rwCzUTC8q16VcliX5lElpRRCIM39wD0vyFkjuJdANTYHpVaEPDhO3wTGCRiQjtnIhCcwxFxYU7MVirCjHL6iBKfHx88bsklLz2Dh1hx8mqR3m8Y8cUF3zuvVmsTYKK47XmHVRKHL/qqBLP7Cf++RBCENcELB40j7KJVpq6hzKIffwJFSsnzXIdLSM/h+zV4KnF5aNbJx45D2jE1NoWPzOlKV0ti4ghMeMPes3pjOuQTWewEwgGc9WPpVb1yFIkIoh99A2X2wmLSVeoPv3bnFxFiMjOrRkvGpKZzSvkndq0rpWVPBCVn9BhmGRhUM6QtZ7oBCEU6Uw29A5Ds9zF6zl7T0TJbtzEUIOLVDE+4c0YlRPVoSa63Dfw6+CvL4RAz4DuiNr6uIiL0G6fmrVB0dAIP+BWLqVD07q4iUEjyrkK5fADvCfh7CdEJY5lbUP+rwJ1xRGbw+jUXbckhLz2Tu+n24vBrtm8Vy39m6lLJ14+ipSlkjLP3BkUFgGQQNqukghXUIMnYSFE4BYdbHMjRFJL4bluJbUkpk/kPgmI2+aWxEFr2DTHgcQ8y4Wp9fUf9QDr+esnHvUSnlgQIXjWPMXDqgDeNSU+iVEn1VKWuKiL0Z6fwJZDH65iqAHWJvq/bmqpQeROwNEHM5uFfrmcHm3uH73bmXgnM2R2u6e/Wf/MeRthEIQ0X7FgpFcJTDr0ccKHDx3apMpqVnsnFvPmajYFgXXUo5vGt0SSlDjTC1hSbTkYWvgnsZGJoj4m4M2kzjeEjffmTeI+BepB+wDEAkPKXPEUakc3a5cJIfYQLXYrCfG1Z76gp6GGyN3nvB0htRjXBefUU5/DqO0+Pjl43ZpKVn8tuWA7qUMqURk8/vznm9W5MUzVLKECNMJyAav1KjMaT0InMv8+8J+MND7mXIg5dAs3kIQ0zNDa00JvRKolrgqWomkoUa6d2NdHwDvn0I62CwjTpun9latceX6e/CtR8wgHQjY2/AEH9nxGyKJpTDr4NIKVmx6xDT0jP5fk0WBU4vLRNsTBrSnnGpyXRsrhQk1cb1G2iHKLsXoIF0gnMOhDF2LuwX6Vm+ZWoQ+e2xDA6bHRUhXQuQh+7gSKhJOn+Gov9Bk6kIEZm9IXnoJr1sdekvyaIPkOaeCNvwiNgUTSiHX4fYk1tcUpVy18Fi7GYjo3u0ZFw/XUpprGtSymjEtzNIwxOAYqR3e9BOPrWFsPRGxk6Eovf8B4wgJaLRqwhDZPMjpPQiD99P2S+jYvDuRBZ9joibGH6bvNvBu4vAJyIHsvhj5fBRDj/qyXd6mLN2L9PSM1m2Q5dSDmrfhNuHd2J0XZdSRiOmrnpzk/KdnEQMwtztuLdL73ZwrwJjM7CcWu0aPkcwxN+BtF+kP3kIG9jOQlSUHxBOvJuBYN2unOD8HiLg8NEK9P2NYAWAtWB1lhoeyltEIV6fxmK/lPKnclLKC/smk1xfpJTRiGUQGNuA92+OOjSTruO3jazwNik1ZN4D4PwJhAEQenJW0mc13uwVpjZguqpGY4QcYQUZZG8BIELhHMzdCO7trXCMlosNCeXwo4hN+/JJS89kxspM9he4aGQ3c0l/vSpl7xpKKaWWC1ohGJNrvOqszwhhgKQvkAX/0Veq+MA2EhH/wDE3I6XjW38pBudRnyMdyMO3QeK7/lr6iWA5Jep+/9KXA1qO3iWsshJWYwcwtvQ3CS/tZO2ImCtrwcrjI4QFGT/Z3wjHjR7asYGxJSLm6ojYFG2oBigR5kCBi5mrs5i2IoMNe/MxGQTDujZnXGoyw7o2x2qqmXOQ2mG9kbN7GWDUV18JT2KwnxWaN6AAQMu5ELwbgpwxoittLHqfbhGDSPoEEQXtEaVWhMy7F1yLjiaWxf0TQ2zlGtJJ7w5k7lX+3Aepl5ywX4RImBzRPA/p2YAs/hR82WAdirCPQxhiI2ZPuDlWAxTl8COA0+Pj1437SUvPYIFfStkrpRFj+yZzXu/WNIk7fj/QyqIdvBQ86ygbb7UhmnyFMJ8UsnkaOtqBUeDbXokrhd4ApukvYXOK0rVEz0/w7gFzZ0Tc3QhLH7RDt+t1/im1SS3siEYv6Q3AKzO29IL7d9AOgrlf2HMVFIHUascrIUQb4BOgJfoz1LtSytfKXTMU+A440n4oTUpZvtF5vUZKSfpuv5RydRb5finlDYN1KWWnFqGXUkrvdvBsJHBzzY0s+gDR+D8hn7PBYjsHit4leHXN0kjdOXo3Qhi+cDXHT5B3HyVqGvcfyNxrkI1fC3T2oIehit6ttMMXwlStXgOKyBCKGL4XuEdKmS6EiAdWCCF+llKWf75dJKVscKmBe3KLmb4yk7T0DHb6pZSjerRkXGoKgzrUspTSl60/qssgOm7fntqbtwEiYq9DOueAluUPcVjQPxrBNjYN/mtqFyklFDxDoI7fCYWv+BUtQSSovgraRSrqPDV2+FLKvcBe/78LhBAbgWQgWECzQVDg9DBn7T6+Tc9g2Y5cQJdS3jZcr0oZFy4ppblrBZpyC1hODY8NDQRhiIOmM8A5G+n6HYzJgMGvoS/vcCWYe4XBKlfwxu6g9/oVwUKHBrCeUqtWKSJHSD2PEKId0Bf4M8jpQUKI1UAWcK+Ucn0FY0wCJgG0bVt34oE+TfqllBn8tH4fTo9G+6ax3DuyMxf2TSYlMZwp+TrCkIiMuQaKP+NoAS4TGOIRsUq1EGqEsID9QoRdb38opRPpmqfH9qUDfQPXDAlPh6n8gEUvDy0LA08Zm0PsLZA/maNfSCY9hh97W41nltILrp+Rzl9ANEbEXIwwd63xuIqaEbJNWyFEHPAb8LSUMq3cuQRAk1IWCiHGAK9JKY9bULwubNpu3ldAWnoG00tJKc/r3YpxqSn0adM44lUppZTgnIUs+lAvGWA9AxF3C8LYIqJ2NRSkdPtX/QvA0AwRcynC1DFs82uFb0Lhexz9wkdXasU/iiFmPNK1FFn0rt631zJQLzhnTK7RnFJ69Ho23nX+0JVfpZTwKIaYi2s0tuL41LpKRwhhBr4HfpJSvlyJ63cC/aWUOce6Llodfk6hi5mrskhbmcG6TF1KObRLc8b3C42UUqGoClIrAk+67sjNfcvo/KXUkAWvgOMTkFKP28fdioiZUGuLEen4Dpn3GGW+ZACwIpovjXhZiPpObat0BPA+sLEiZy+EaAlkSymlEOJk9K/8gzWdO5w4PT7mbdrPtBVHpZQ9kxvx+HknhVxKqVBU1TkXsAAAE2RJREFUFq14GuQ/4a+eKfUQTuJ7JZJbIQyIhHuQ8bfr5YINTdDXZ7WHLFPDvxTCDO6/wDasVudXVEwoYvinAVcDa4UQq/zHHgLaAkgppwDjgZuFEF70v4TLZDQnAPjRpZSHSUvPYJZfStkiwcrEwScyLjWFzrUgpVQoKov0bD4agy/J7i3SwynNF5dx7EJY9MzYcCDi0LPMyn/E/V9IiogRCpXOYjh2EUEp5ZvAmzWdK1zsyS1mxspM0lZmsiOnCJvZwKjuelXKUzs0VVUpw4iUPvCs1KWl5r4NKmPyeMjirwnQ0QPg0ZOhrGeE2yQARMxl+mZtkJAOln6RMEnhR9XS8VPg9DBn3T6mrcjgT7+U8pT2SdwytAOje7YKn5RSUYL0bEAemuhXuAiQPmTCZAwxF0batOhAHiKozl9KvXJkdYeV0q8s8oKpk15fqAoIywBk3I1Q+F/A7F8OmhFJ7+uJWoqI0aB/+z5NsmRbDtNKSSlPjLCUUqFTovSQh8qeyH8Mae6OMB9X5FXvEdYRuuwzIInLA5aTqzWm9GxGHr4VfAdACBCx0PhVhGVAlcYxxN2CtF8M7j/BEO8vFV27eweK49MgHf6W7AKmrchgxqpMsvNdJNhMjEtNYVy/FPpGgZRSAbiXUFG4Qjq+RpgfDrdF0YdtpJ5j4dnA0fCJHeImIozNqzyclC5k7tUgD/sPALIYeegGaPoLwti0SuMJYzPVdzfKaDAO/2ChvyplemkpZTMePy+F4d2UlDLq0PL10EQAPl1totBXzEkfg+N7pPMHEHGImMsQ1kHVG9D5K0Gbmkgf0jEjIl2sFKGlXjt8l9fHvI37mZaewYLNB/D6pZT/9kspmyopZfRiGUjZvrJ+RAzCVv3SzlIrBO2wXiO9HsSThbBAzFhEzNiaD6blBHb6AvQSDQdqPr4i4tT9v/hySClZuecw01Zk8P2aveQ5PLRI+H97dx4kR3necfz7m3sPtDoRAoEhQcIYLCAWl4EEG6wIBVsxthMMCRBcIaSsGBK7CmwMFGARJ1ThJJgIEBAD4bSRgDIExOUALsuWTHFL2ESBSByWBDp2NXvNzpM/uiXtrmZ2Z3dnp+d4PlVb2uluTT9SzT7b/b5vP0+ar510EGccNZND9vGllLVA8elhP9fbGTBckTgU0qVVcuzPrAvb9l3oepygL0AK2+tSYhVsSl71UnMJHpEZRM1olHMCrrrUXcLP9vRx9tJfYhjzD9uHM/5gJicc7Espa1Fsr4uw1Fwsez9YB8r8CTR9flRX5rbt29D1FLvmBawTtl+FxfdB6RPKG3iNUvITWPrkoH/url+yGUjMhvTJ0QXmyqYuG6CsXPchh+07gb0yvirAhV2/Np5IwUng1LHEJt9V8ZiqlVkfdC7DsvcBOcgsRC1no4KVNV01GtfSCtXouN+bEnUIrprkN4d9AQrVfn+38vGEzCzohZv9UbBuPn0yal00qhU25SLFofkryIuc1aW6TPjODRDfv8iOGCQLXghVhLV/Dzp/Ej5YBnT+BOt+CqY+imKTIovL1a+RPULnXA2S0tB6cVBNcpdYUPu99euRxGR9myB7/+5kD0AO8u1Y9t5IYnL1zxO+awixlnNR23WQ/CTEpkPmNDRlGUp8LJqAcm9AwSYo3dC9suLhuMbgQzquYSgzD2XmRR1GIDYjqFWzhzgkaqPTm3X/DNtxT9BRK3Na0NVKmajDckPwhO8qancHrtuCB6DSJ4UTlRUq3TsOLL8V63wIcutQ8ghoWoAGDB/tScnZWGJ2cKVP/8SfRM3njmu85ZBvvx6yd+wekup9DetcBlPur1D7RjcaPqTjKsrar8e2XQ65NZB/P1gCuHkh1jdk87OqZb2/xTadAu3XQ+d9WPs12KbTsL7h+/to8lJIHQckgQzE9kaTbqj6wnDW9zvY8R+D5h+6ILcOuh6NLC43PE/4rmIsvzVYgsigiUrbgWXvjCiqsbFtl4ZNwsNG4JaF/EasY9hOnyg2idjk29HeP0dTH0PTnkMR1bAfkZ5fB60S99CJdT1b8XBc6Tzh1zEzw3rXYj2rsPzgEroR6H2zyERlD/T8ouLhjJXlO4I7lT06O+Wga0XJ76PYRJSYOeK685GJtRXZEYfYtIqG4kbGx/DrlOXWB2Vt8+8D8bB5yHeINf95dEHFpxd++InYEGvlq5iGqLA6TO13sy7oWRlUBE0di2I11HshdVzQqtCyDPxll0RRfr7csGrkksKNhJlhW86HvreDcVbrADph+2Ks5+Xynad3Dda5HOt5kVJKdChxYLAsksHJMIVazi9bXJUiNUHqeGBw4k9DU/GibNb9PLbxeGzrP2DbvoltOp5855PjGms5SXE0+Q6I7RckfrUGjVLaFqPk7KjDc0MoyxW+pPnAvxJ88m81s+8P2q9w/wIgC5xnZi+W49yugNyrYTnbwe3vurHsXSh1xJje3qwb23JhOJYbXjPED4DJd6LYxCH/riYtwbZ+KxzCiUOsGU24CiUPH1NMUVHb97GPzgpLC/cBguThRR/osvwWbMsi9uj3uu2bWGpFzaxWUuJgmPZ0sMrIspCc4/V2asCYE76kOHAj8DlgA7BK0iNm9ka/w04DZoVfxwJLwj/deMhvpfDNm5Wlrrl1/BB6VgPdu+/oc/+DbbscTbphyL+rWBuavBTLbwnqx8T3C+q31CjFp8HUJ4Km4X0bgvLNyTnFu6Z1PVHknfLQ9RjU0J2OJEgeFnUYbgTKcYV/DPCWma0DkHQfsBDon/AXAndacN+/UtJESTPM7P0ynN8NljyiSCOLDKRPGfv7Z38MdA/a2AvdT2PWU9I6bMUmQZ3Ui5FikD6xtINtBwPX3e/Ui+U78CLebjyVYwx/P2B9v9cbwm0jPQYASRdIWi1p9aZN3mVnNBRrg9ZvAP0f/slAfF/U9OUynKHQxCsEl/sFulS53VInseeYP6BMbSzJdDWtHAm/0EXJ4Bm8Uo4JNprdYmZzzWzutGm+xGu0Yq1/jSb9O6Q/C8mjoPUiNOXB8qwGSZ9MwaSVOHTYJ0wbnZKzoemMgYXc1ATpeZCcE11griGUY0hnA9B/Td1M4L1RHOPKTOkTxqebU+ZL0PUMwZV+DkiDkqjt2vKfqw5pwpWQOTUoRUAeZRYGtfCLjfs7VyblSPirgFmSDgLeBc4Ezhp0zCPAonB8/1hgm4/f16b89usgexe7x/BjkPo0arsWxb3xTCkkQfpEVOq4v3NlMuaEb2Y5SYuAJwju8283s9clXRjuvwl4jGBJ5lsEyzL/aqzndZVnva+Hyb6r/9ZghQqFJoldMdb7W2zHEuhdA4lZqPVvUfLQqMNyda4s6/DN7DGCpN5/2039vjcgmk4Trmys63EKT9gKup+F5q9WOqSaZD0vYx+dQ3CXlIe+/8W6/xsm34pSR0cdnqtj/qStG4E4heffhX+USmftiwkevNr5YFwe6MS2Xx1dUK4h+E+pK5kyC9izLAJAHtKnVjqc2tX7WuHtuTcxG/x0tHPl4wnflUzJ2dC6CEiHX5ngzwnf8wnbkdCEIttba6dipqtJXi3TjUis9QIsc1owZq84pOcF5QVc6VrOg44lDKynk4Hmv4woINcoPOG7EVNif0icE3UYNUstF2D5jUGJCiWDMhhNn0etfxd1aK7OecJ3rsKkGJpwBdZ6UVBwLb7fsFVGnSsHT/iu7li+I6g8md8IySODB8OqcGxcsbYhukc5V36e8F1dsd43gjXu1gt0Bg06EocEtfq9XrtrcNV32TMG1reZ/LZryG/8LPnNX8Q6Hy6pE5OrD2aGbb0YbDu7JkQtC71rsB0/KsP7d2G5dcEdhHM1qG6u8C2/FftwIeS3ADnIb8C2XQG9a9GES6IOz1VC37vQV6gmXxd0LofWvxnV25oZtuNG2LEUiIHlsKYvoQnfRaqbHyHXAOrmCt+yd0N+OwObS3RC9j+xvg+jCstVkPWuonit/jG8b/YB6Fga9gfeAXRD5zKs/fqyn8u58VQ3CZ/uX7BnFyZAqaDvpqtrZr2wfXGRvYkhm4oPK3sze/SgpQs678bMG7642lE/CT8xk4L/HMtBbHrFw3EV1vsKezZtD6kJtZw7+vfOF7lDtB6wrsL7nKtCdZPw1XweMLiXagISBwclAVydS1CkiVrYVHz4PrvF3/rwwttj04NVQM7ViPpJ+MmPo4k/gNhkgl6uKUgdjSYvjTo0VwnJTxZJvk2o+c+CidfOR8l/eCb5zaeTb7+h5NU2waR/EwMrhWZgwuXepcrVlLpaYqDMKUG/1b71oL28oFcDkWIwaQn20XmAhevwY9C0ANLzsfZrIfsAu8bic+9gXT+FqQ8N24dXyTkw5X6s44ag0mXiINT6da9d72pOXSV8ACkOiQOjDsMNwSwP+feDX8qxIpUjR0HJOTDtBeh+JliemzoOJWdhfR9A9l4GruDphr4PsOxDqGX4xi1KfhxNurFssToXhbpL+K66WdfT2PbLId8B5LH0iajtn8uW+BVrhqbTB27sfSlYrWWDl2x2Qs/zUELCd64ejGkMX9J1ktZKekXSckkFK0BJelvSq5JekrR6LOd0tct6X8e2/j3kNxP0xe2B7hewLePc/TI2hcITunGIzRjfcztXRcY6afskcLiZzQF+A3x7iGM/Y2ZHmtncMZ7T1SjbcRt7PhjVA70vY7n/G78TJz8VTuYP/rgnUctZ43de56rMmBK+ma0ws52Ptq4EZo49JFe3cuspuFZeSch/MG6nlWJo0h2QmA1kQC2gNjTxByjx++N2XueqTTnH8M8H7i+yz4AVkgy42cxuKfYmki4ALgA44IADyhiei1z62PCp596B260nTMbjR4mZaOojwZ2EdUBittfBcQ1n2E+8pKeAfQrsuszMHg6PuYygiM3dRd7mBDN7T9LewJOS1prZc4UODH8Z3AIwd+5cL3VZR9R8Hpb9cVjNcmdJgiZo/ouKNQBRwi8iXOMaNuGb2alD7Zd0LnA6cIoVqUVsZu+Ff26UtBw4BiiY8F39UnwqTH0I6/g36H4BYhNRy9cgszDq0JxrCGO6p5U0H7gE+CMzyxY5pgWImVl7+P084OqxnNfVLsVnoLZ/jDoM5xrSWAcxfwikCYZpAFaa2YWS9gVuNbMFwHRgebg/AdxjZo+P8byugVjubaxzGeS3o8xnIHVSVbYsdK7ajSnhm9nBRba/BywIv18HHDGW87jGlc8+DNsvJ5giymFdD0HqGJi4JHiq2jlXMr9MclXL8h1hsu9iV2Mby0LPr6B7RZShOVeTPOG76tWzCgotnbQs1vnTysfjXI3zhO+q11A17JWpXBzO1QlP+K56pY4GCo3TN6GmL1c6Gudqnid8V7WkFJp0E6g1KIdAE5CG5nNQ+viow3Ou5viz5a6qKfUp2Pvn0PVsUBIh9WmU8JJNzo2GJ3xX9aSmoHOVc25MfEjHOecahCd855xrEJ7wnXOuQXjCd865BuEJ3znnGoSKlLCvCpI2Ae9EHccITAU2Rx3EKHjclVOLMYPHXWljiftjZjat0I6qTvi1RtLqWmzS7nFXTi3GDB53pY1X3D6k45xzDcITvnPONQhP+OV1S9QBjJLHXTm1GDN43JU2LnH7GL5zzjUIv8J3zrkG4QnfOecahCf8MpN0jaRXJL0kaYWkfaOOqRSSrpO0Nox9uaSJUcc0HElfkfS6pLykql96J2m+pDclvSXp0qjjKYWk2yVtlPRa1LGMhKT9JT0raU34Gbko6piGIykj6VeSXg5jvqrs5/Ax/PKSNMHMtofffwP4hJldGHFYw5I0D3jGzHKS/gnAzC6JOKwhSToUyAM3A98ys9URh1SUpDjwG+BzwAZgFfBVM3sj0sCGIekPgQ7gTjM7POp4SiVpBjDDzF6UtBfwa+BPq/n/W5KAFjPrkJQEXgAuMrOV5TqHX+GX2c5kH2oBauI3qpmtMLNc+HIlUPVdRsxsjZm9GXUcJToGeMvM1plZD3AfsDDimIZlZs8BH0Udx0iZ2ftm9mL4fTuwBtgv2qiGZoGO8GUy/Cpr/vCEPw4kLZa0HjgbuCLqeEbhfOC/og6izuwHrO/3egNVnoDqhaQDgaOAX0YbyfAkxSW9BGwEnjSzssbsCX8UJD0l6bUCXwsBzOwyM9sfuBtYFG20uw0Xd3jMZUCOIPbIlRJzjVCBbTVx91fLJLUCDwIXD7r7rkpm1mdmRxLcYR8jqazDaN7icBTM7NQSD70HeBS4chzDKdlwcUs6FzgdOMWqZHJnBP/X1W4DsH+/1zOB9yKKpSGE4+APAneb2bKo4xkJM9sq6WfAfKBsE+Z+hV9mkmb1e/kFYG1UsYyEpPnAJcAXzCwbdTx1aBUwS9JBklLAmcAjEcdUt8IJ0NuANWZ2fdTxlELStJ2r4yQ1AadS5vzhq3TKTNKDwCEEq0feAS40s3ejjWp4kt4C0sCH4aaV1b66SNIXgRuAacBW4CUz++NooypO0gLgX4A4cLuZLY44pGFJuhc4maBc7++AK83stkiDKoGkE4HngVcJfhYBvmNmj0UX1dAkzQHuIPh8xIAHzOzqsp7DE75zzjUGH9JxzrkG4QnfOecahCd855xrEJ7wnXOuQXjCd865BuEJ3znnGoQnfOecaxD/DxwoBLn8OPvUAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图\n",
    "draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.97"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#预测\n",
    "correct = 0\n",
    "for xi, yi in zip(x, y):\n",
    "    #计算模型\n",
    "    pred = xi.dot(w) + b\n",
    "\n",
    "    #激活函数,把数据压缩到0-1之间\n",
    "    pred = 1 / (1 + np.exp(-pred))\n",
    "\n",
    "    #I函数\n",
    "    pred = 1 if pred > 0.5 else 0\n",
    "\n",
    "    if pred == yi:\n",
    "        correct += 1\n",
    "\n",
    "correct / len(x)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
